package com.car.action.api;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.compress.utils.Lists;

import com.car.common.model.AdminUser;
import com.car.common.model.Banner;
import com.car.common.model.TempWrap;
import com.car.common.model.Users;
import com.car.common.model.UsersInfo;
import com.car.common.model.VipPackage;
import com.car.common.model.VipRule;
import com.car.tx.UserWrap;
import com.google.common.collect.Maps;
import com.jfinal.core.Controller;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.ehcache.CacheKit;
import com.jfinal.plugin.ehcache.IDataLoader;
import com.utils.APIJSON;
import com.utils.CityUtil;
import com.utils.JwtToken;
import com.utils.MD5Util;
import com.utils.RongCloudUtil;
import com.utils.StringUtil;
import com.utils.SystemClock;

public class VipController extends Controller {

	// TODO 没用到
	public void rule_list() {
		ArrayList<VipRule> vipRuleList = CacheKit.get("constant", "vipRulelist", new IDataLoader() {
			public Object load() {
				return VipRule.dao.getAll();
			}
		});
		renderText(APIJSON.send(vipRuleList));
	}

	/**
	 * 会员套餐列表
	 */
	public void package_list() {
		int type = 1;
		if (!StringUtil.empty(getPara("type"))) {
			type = getParaToInt("type");
		}
		List<VipPackage> vipPackageList = VipPackage.dao
				.find("select id , title,price,apple_pay_id  from vip_package where status = 1 and type = " + type
						+ " order by price desc ");
		List<Map<String, Object>> result = Lists.newArrayList();

		String agent = getRequest().getHeader("user-agent");

		for (VipPackage one : vipPackageList) {
			Map<String, Object> map = Maps.newHashMap();
			map.put("id", one.get("id"));
			if (type == 2) {
				if (agent.contains("iPhone") || agent.contains("iPod") || agent.contains("iPad")) {
					String title = one.getTitle().replace("℃", "");
					Integer val = Integer.parseInt(title);
					map.put("title", new Double(val * 0.7).intValue() + "℃");
				} else {
					map.put("title", one.get("title"));
				}
			} else {
				map.put("title", one.get("title"));
			}

			map.put("price", one.get("price"));
			map.put("appleIdentifer", one.get("apple_pay_id"));
			result.add(map);
		}
		renderText(APIJSON.send(result));
	}

	public void register() {
		Users one = new Users();
		one.setUserMobile(getPara("user_mobile"));
		one.setUserPassword(getPara("user_password"));
		one.setCreateTime(SystemClock.now() / 1000L);
		one.setUpdateTime(SystemClock.now() / 1000L);
		if (one.save()) {
			UsersInfo info = new UsersInfo();
			info.setUserId(one.getId().intValue());
			info.setCreateTime(SystemClock.now() / 1000L);
			info.save();
		}
		renderText(String.valueOf(one.getId()));

	}

	public void qiehuan() {
		int page = 1;
		if (!StringUtil.empty(getPara("page"))) {
			page = getParaToInt("page");
		}
		List<Users> users = Users.dao.find(
				"select id,user_mobile,nick_name,user_header,sex,area_id from users where id< 200000 and nick_name is not null and user_header is not null and id != 141  and id != 200  and  id != 140901 and id !=140935 and id !=162424 and id!= 135408 and id !=46606 and id!= 35469 and id !=95130 and id!= 92512 and id != 11877 and id !=133699 and id !=80657 and id != 15570 and id != 100952  order by id desc limit "
						+ (page - 1) * 5000 + " ,5000");
		for (Users one : users) {
			try {
				String nick_name_a = StringUtil.decode(one.getNickName());
//				String user_header_a = one.getUserHeader();
				int sex_a = one.getSex() == null ? 1 : one.getSex();
//				Long area_id = one.getAreaId();

				Users you = null;
				you = Users.dao.findFirst(
						"select id,user_mobile,nick_name,user_header,sex,area_id from users where  sex = " + sex_a
								+ " and  id< 200000 and  nick_name is not null and id != 141  and id != 200  and  id != 140901 and id !=140935 and id !=162424 and id!= 135408 and id !=46606 and id!= 35469 and id !=95130 and id!= 92512  and id != 11877 and id !=133699 and id !=80657 and id != 15570 and id != 100952  ORDER BY RAND() LIMIT 1");
				/*
				 * if (area_id != null) { you = Users.dao.
				 * findFirst("select id,user_mobile,nick_name,user_header,sex,area_id from users where area_id = "
				 * + area_id +
				 * " and nick_name is not null and id != 141  and id != 200  and  id != 140901 and id !=140935 and id !=162424  ORDER BY RAND() LIMIT 1"
				 * ); } else { you = Users.dao.
				 * findFirst("select id,user_mobile,nick_name,user_header,sex,area_id from users where nick_name is not null and user_mobile is not null and user_header is not null and id != 141  and id != 200  and  id != 140901 and id !=140935 and id !=162424  ORDER BY RAND() LIMIT 1"
				 * ); }
				 */
				if (you != null) {
					String nick_name_b = StringUtil.decode(you.getNickName());
//					String user_header_b = you.getUserHeader();
//					Integer sex_b = you.getSex() == null ? 1 :you.getSex();
					// ',user_header ='"+user_header_b+"',sex = " + sex_b +"
					// ',user_header ='"+user_header_a+"',sex = " + sex_a +"
					if (!StringUtil.empty(nick_name_a) && !StringUtil.empty(nick_name_b)) {
						System.out.println(
								"update users set nick_name = '" + nick_name_b + "' where id = " + one.getId());
						System.out.println(
								"update users set nick_name = '" + nick_name_a + "' where id = " + you.getId());
						Db.update("update users set  nick_name = '" + nick_name_b + "' where id = " + one.getId());
						Db.update("update users set  nick_name = '" + nick_name_a + "' where id = " + you.getId());
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		renderText("处理完成!");
	}

	public void oauth_login() {
		Users one = new Users();
		one.setStatus(1);
		one.setCreateTime(SystemClock.now() / 1000L);
		one.save();
		renderText(String.valueOf(one.getId()));
	}

	public void get_user_id() {
		try {
			renderText("" + JwtToken.getAppUID(getPara("token")));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		render("0");
	}

	public void wrap() {
		TempWrap one = new TempWrap();
		one.set("user_id", getPara("id"));
		one.set("user_mobile", getPara("user_mobile"));

		one.set("user_password", Users.password(getPara("user_password")));
		one.set("create_time", SystemClock.now() / 1000L);
		one.save();
		/*
		 * Users one = new Users(); one.setUserMobile(getPara("user_mobile"));
		 * one.setUserPassword(getPara("user_password"));
		 * one.setCreateTime(SystemClock.now()/1000L);
		 * one.setUpTime(SystemClock.now()/1000L);
		 * one.setUpdateTime(SystemClock.now()/1000L); if (one.save()) { Long id =
		 * one.getId(); Db.update("update users_info set user_id = " + id
		 * +" where user_id = " + getPara("id"));
		 * Db.delete("delete from users where id =" + getPara("id"));
		 * Db.update("update users set id = " + getPara("id") +" where id = "+ id); }
		 */
		/*
		 * Users users = Users.dao.findById(getPara("id")); if (users != null) {
		 * users.setUserMobile(getPara("user_mobile"));
		 * users.setUpTime(SystemClock.now()/1000L); users.update(); }
		 */
		renderText("0");
	}

	/**
	 * 3 * @param content 请求的参数 格式为：name=xxx&pwd=xxx
	 *
	 * @param encoding 服务器端请求编码。如GBK,UTF-8等
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public static String getAddresses(String content, String encodingString) throws UnsupportedEncodingException {
		// 这里调用pconline的接口
		String urlStr = "http://ip.taobao.com/service/getIpInfo.php";
		// 从http://whois.pconline.com.cn取得IP所在的省市区信息
		String returnStr = getResult(urlStr, content, encodingString);
		if (returnStr != null) {
			// 处理返回的省市区信息
//            System.out.println("IP=====" + returnStr);
			String[] temp = returnStr.split(",");
			if (temp.length < 3) {
				return "0"; // 无效IP，局域网测试
			}
			String region = (temp[4].split(":"))[1].replaceAll("\"", "");
			region = decodeUnicode(region); // 省
			System.out.println("region = " + region);
//			String city = (temp[5].split(":"))[1].replaceAll("\"", "");
//			city = decodeUnicode(city); // 省
//			System.out.println("city = " + city);
			/*
			 * String country = ""; String area = ""; // String region = ""; String city =
			 * ""; String county = ""; String isp = ""; System.out.println("temp的长度=" +
			 * temp.length); for (int i = 0; i < temp.length; i++) { switch (i) {
			 * //如果使用的是新浪的接口，那这里的需要修改，case:3 4 5分别对应国家，省，市区 case 1: country =
			 * (temp[i].split(":"))[2].replaceAll("\"", ""); country =
			 * decodeUnicode(country); // 国家 break; case 3: area =
			 * (temp[i].split(":"))[1].replaceAll("\"", ""); area = decodeUnicode(area); //
			 * 地区 break; case 5: region = (temp[i].split(":"))[1].replaceAll("\"", "");
			 * region = decodeUnicode(region); // 省份 break; case 7: city =
			 * (temp[i].split(":"))[1].replaceAll("\"", ""); city = decodeUnicode(city); //
			 * 市区 break; case 9: county = (temp[i].split(":"))[1].replaceAll("\"", "");
			 * county = decodeUnicode(county); // 地区 break; case 11: isp =
			 * (temp[i].split(":"))[1].replaceAll("\"", ""); isp = decodeUnicode(isp); //
			 * ISP公司 break; } } System.out.println(country + "=" + area + "=" + region + "="
			 * + city + "=" + county + "=" + isp);
			 */
			// +"省"+city
			return region ;
		}
		return null;
	}

	/**
	 * @param urlStr   请求的地址
	 * @param content  请求的参数 格式为：name=xxx&pwd=xxx
	 * @param encoding 服务器端请求编码。如GBK,UTF-8等
	 * @return
	 */
	private static String getResult(String urlStr, String content, String encoding) {
		URL url = null;
		HttpURLConnection connection = null;
		try {
			url = new URL(urlStr);
			connection = (HttpURLConnection) url.openConnection(); // 新建连接实例
			connection.setConnectTimeout(2000); // 设置连接超时时间，单位毫秒
			connection.setReadTimeout(2000); // 设置读取数据超时时间，单位毫秒
			connection.setDoOutput(true); // 是否打开输出流 true|false
			connection.setDoInput(true); // 是否打开输入流true|false
			connection.setRequestMethod("POST"); // 提交方法POST|GET
			connection.setUseCaches(false); // 是否缓存true|false
			connection.connect(); // 打开连接端口
			DataOutputStream out = new DataOutputStream(connection.getOutputStream());// 打开输出流往对端服务器写数据
			out.writeBytes(content); // 写数据,也就是提交你的表单 name=xxx&pwd=xxx
			out.flush(); // 刷新
			out.close(); // 关闭输出流
			BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));// 往对端写完数据对端服务器返回数据
																														// ,以BufferedReader流来读取
			StringBuffer buffer = new StringBuffer();
			String line = "";
			while ((line = reader.readLine()) != null) {
				buffer.append(line);
			}
			reader.close();
			return buffer.toString();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (connection != null) {
				connection.disconnect(); // 关闭连接
			}
		}
		return null;
	}

	/**
	 * unicode 转换成 中文
	 *
	 * @param theString
	 * @return
	 * @author fanhui 2007-3-15
	 */
	public static String decodeUnicode(String theString) {
		char aChar;
		int len = theString.length();
		StringBuffer outBuffer = new StringBuffer(len);
		for (int x = 0; x < len;) {
			aChar = theString.charAt(x++);
			if (aChar == '\\') {
				aChar = theString.charAt(x++);
				if (aChar == 'u') {
					int value = 0;
					for (int i = 0; i < 4; i++) {
						aChar = theString.charAt(x++);
						switch (aChar) {
						case '0':
						case '1':
						case '2':
						case '3':
						case '4':
						case '5':
						case '6':
						case '7':
						case '8':
						case '9':
							value = (value << 4) + aChar - '0';
							break;
						case 'a':
						case 'b':
						case 'c':
						case 'd':
						case 'e':
						case 'f':
							value = (value << 4) + 10 + aChar - 'a';
							break;
						case 'A':
						case 'B':
						case 'C':
						case 'D':
						case 'E':
						case 'F':
							value = (value << 4) + 10 + aChar - 'A';
							break;
						default:
							throw new IllegalArgumentException("Malformed  encoding.");
						}
					}
					outBuffer.append((char) value);
				} else {
					if (aChar == 't') {
						aChar = '\t';
					} else if (aChar == 'r') {
						aChar = '\r';
					} else if (aChar == 'n') {
						aChar = '\n';
					} else if (aChar == 'f') {
						aChar = '\f';
					}
					outBuffer.append(aChar);
				}
			} else {
				outBuffer.append(aChar);
			}
		}
		return outBuffer.toString();
	}

	public void notice() {
		List<Users> users = Users.dao.find(
				"select u.id from users as u where u.vip_badpe = 0 and u.is_true = 1 and u.sex = 1 and (u.login_status = 0 or u.logout_time >1606810458 )");
		for (Users one : users) {
			String content = "双11表白季活动最后一天啦，错过今天在等一年。开通 月会员，加赠2个月，实际到手3个月会员。开通 年会员，送10000热度值。开通 至尊永久会员，送58888热度值。部分老版本没有至尊永久会员的，可以关注微信公众号：BDSM50D。";
			RongCloudUtil.sendTxt("141", String.valueOf(one.getId()), content);
		}
		// select (up_time - create_time)/(30*24*3600) as time from users where up_time
		// < 1549008074 and user_mobile is not null and LENGTH(user_mobile) > 0 and
		// is_true =1 HAVING time > 1
		renderJson("ok");
	}
	
	public void sms_check() {
		String address = "";
		try {
			address = getAddresses("ip=" + getPara("ip"), "utf-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String address2 = CityUtil.getCity(getPara("user_mobile"));
		if (address != null && address2 != null && address2.indexOf(address) > -1) {
			renderText("1");
		} else {
			renderText("0");
		}
	}
	public static void main(String[] args) {
		String ip = "171.11.2.213";
		String address = "";
		try {
			address = getAddresses("ip=" + ip, "utf-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(address);
		String address2 = CityUtil.getCity("15167981336");
		if (address != null && address2 != null  && address2.indexOf(address) > -1) {
			System.out.println(address2.indexOf(address));
		}

	}
}
